﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

/*
 * Um fixup serve para manipular bytes no objeto no procedimento de relocação
 * Esta classe representa o estilo Fixup ligado à uma instrução.
 * Por isso, não precisa referência ao um lugar no objeto binário
 * 
 * Tem dois tipos de fixup:
 *  - tipo valor tem um endereço, gravado na imagem binária da instrução, que é
 *    relativo ao objeto relocavel. Relocação é adicionar a relocação do objeto para
 *    cada fixup tipo valor neste objeto. O valor fica no objeto, não no fixup
 *  - tipo simbólico tem referência a um símbolo. O valor deve ser incluido no
 *    objeto posteriormente. Se o símbolo é um rótulo local, relocamente deve ser aplicado depois
 *    
 * 
 */

namespace J_FoundationClasses.Programacao
{
    public class FixupFonte
    {
        public bool Simbolico; // o valor para relocar é um Símbolo/Rótulo
        public String Rotulo; // O lexema do símbolo determinando o valor. Há significativo se Simbólico = True
        public uint Tamanho;  // Número de bytes a manipular na relocação
        public uint Distanca = 0;  // Número do primeiro byte na instruçao a manipular

        public FixupFonte(uint prmTam, String prmSim)
        {
            Tamanho = prmTam;
            Simbolico = true; 
            Rotulo = prmSim;
        }
        public FixupFonte(uint prmTam)
        {
            Tamanho = prmTam;
            Simbolico = false;
        }
    }
}
